/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.isd.promocion.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import com.isd.global.util.JsfUtil;
import com.isd.inventario.modelo.Producto;

/**
 *
 * @author Claudio
 */
@Entity
@Table(name = "USR_TVPROH")
public class Promocion implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "USR_TVPROH_NROPRO", nullable = false)
    private Integer nroPromocion;
    @Column(name = "USR_TVPROH_DESCRP", length = 250)
    private String descripcion;
    
    @Column(name = "USR_TVPROH_PRDUNI")
    private String productoUnico;

    @JoinColumns({
        @JoinColumn(name = "USR_TVPROH_TIPPRO", referencedColumnName = "STMPDH_TIPPRO", nullable = false, insertable=true, updatable=true),
        @JoinColumn(name = "USR_TVPROH_ARTCOD", referencedColumnName = "STMPDH_ARTCOD", nullable = false, insertable=true, updatable=true)
    })
    @ManyToOne(optional=false)
    private Producto producto;

    @Lob
    @Column(name = "USR_TVPROH_PATHIB", length = 2147483647)
    private String pathImageneBanner;
    @Lob
    @Column(name = "USR_TVPROH_PATHIM", length = 2147483647)
    private String pathImagenInicio;

    @Column(name = "USR_TVPROH_CNTMIN", precision = 18, scale = 4)
    private BigDecimal cantidadMinima;
    @Column(name = "USR_TVPROH_CNTMAX", precision = 18, scale = 4)
    private BigDecimal cantidadMaxima;

    @Column(name = "USR_TVPROH_PRCPRO", precision = 20, scale = 6)
    private BigDecimal precioPromocion;
    @Column(name = "USR_TVPROH_PRCNOR", precision = 20, scale = 6)
    private BigDecimal precioNormal;

    @Column(name = "USR_TVPROH_DISDES")
    @Temporal(TemporalType.DATE)
    private Date disponibleDesde;
    @Column(name = "USR_TVPROH_DISHAS")
    @Temporal(TemporalType.DATE)
    private Date disponibleHasta;

    @Column(name = "USR_TVPROH_MPROPC")
    private Character muestraPromocionCatalogo;
    
    @Lob
    @Column(name = "USR_TVPROH_NOTCPA", length = 2147483647)
    private String notasCondiconPago;
    
        
    @Lob
    @Column(name = "USR_TVPROH_PATHA4", length = 2147483647)
    private String pathA4Promocional;
    
    @Column(name = "USR_TVPROH_TITUA4", length = 80)
    private String tituloA4Promocional;
    
    @Column(name = "USR_TV_DEBAJA")
    private Character debaja;

    @OneToMany(mappedBy = "promocion", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    private List<ItemPromocion> itemsPromocion;

    @Transient
    private boolean activa;
    
    public Promocion() {
    }

    public Promocion(Integer nroPromocion) {
        this.nroPromocion = nroPromocion;
    }

    public BigDecimal getCantidadMaxima() {
        return cantidadMaxima;
    }

    public void setCantidadMaxima(BigDecimal cantidadMaxima) {
        this.cantidadMaxima = cantidadMaxima;
    }

    public BigDecimal getCantidadMinima() {
        return cantidadMinima;
    }

    public void setCantidadMinima(BigDecimal cantidadMinima) {
        this.cantidadMinima = cantidadMinima;
    }

    public Character getDebaja() {
        return debaja;
    }

    public void setDebaja(Character debaja) {
        this.debaja = debaja;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Date getDisponibleDesde() {
        return disponibleDesde;
    }

    public void setDisponibleDesde(Date disponibleDesde) {
        this.disponibleDesde = disponibleDesde;
    }

    public Date getDisponibleHasta() {
        return disponibleHasta;
    }

    public void setDisponibleHasta(Date disponibleHasta) {
        this.disponibleHasta = disponibleHasta;
    }

    public Integer getNroPromocion() {
        return nroPromocion;
    }

    public void setNroPromocion(Integer nroPromocion) {
        this.nroPromocion = nroPromocion;
    }

    public String getPathImagenInicio() {
        return pathImagenInicio;
    }

    public void setPathImagenInicio(String pathImagenInicio) {
        this.pathImagenInicio = pathImagenInicio;
    }
    
    
    public String getPathImageneBanner() {
        return pathImageneBanner;
    }

    public void setPathImageneBanner(String pathImageneBanner) {
        this.pathImageneBanner = pathImageneBanner;
    }

    public BigDecimal getPrecioNormal() {
        return precioNormal;
    }

    public void setPrecioNormal(BigDecimal precioNormal) {
        this.precioNormal = precioNormal;
    }

    public BigDecimal getPrecioPromocion() {
        return precioPromocion;
    }

    public void setPrecioPromocion(BigDecimal precioPromocion) {
        this.precioPromocion = precioPromocion;
    }

    public Producto getProducto() {
        return producto;
    }

    public void setProducto(Producto producto) {
        this.producto = producto;
    }

    public String getProductoUnico() {
        return productoUnico;
    }

    public void setProductoUnico(String productoUnico) {
        this.productoUnico = productoUnico;
    }

    public List<ItemPromocion> getItemsPromocion() {
        return itemsPromocion;
    }

    public void setItemsPromocion(List<ItemPromocion> itemsPromocion) {
        this.itemsPromocion = itemsPromocion;
    }

    public Character getMuestraPromocionCatalogo() {
        return muestraPromocionCatalogo;
    }

    public void setMuestraPromocionCatalogo(Character muestraPromocionCatalogo) {
        this.muestraPromocionCatalogo = muestraPromocionCatalogo;
    }

    public boolean isActiva() {

        if( (disponibleDesde.before(JsfUtil.getFecha()) || disponibleDesde.equals(JsfUtil.getFecha()))
            && (disponibleHasta.after(JsfUtil.getFecha()) || disponibleHasta.equals(JsfUtil.getFecha()))){
            activa = true;
        }else{
            activa = false;
        }

        return activa;
    }

    public void setActiva(boolean activa) {
        this.activa = activa;
    }

    public String getNotasCondiconPago() {
        return notasCondiconPago;
    }

    public void setNotasCondiconPago(String notasCondiconPago) {
        this.notasCondiconPago = notasCondiconPago;
    }
    
    
    
        
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (nroPromocion != null ? nroPromocion.hashCode() : 0);
        return hash;
    }

    public String getPathA4Promocional() {
        return pathA4Promocional;
    }

    public void setPathA4Promocional(String pathA4Promocional) {
        this.pathA4Promocional = pathA4Promocional;
    }

    public String getTituloA4Promocional() {
        return tituloA4Promocional;
    }

    public void setTituloA4Promocional(String tituloA4Promocional) {
        this.tituloA4Promocional = tituloA4Promocional;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Promocion)) {
            return false;
        }
        Promocion other = (Promocion) object;
        if ((this.nroPromocion == null && other.nroPromocion != null) || (this.nroPromocion != null && !this.nroPromocion.equals(other.nroPromocion))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "tv.promos.modelo.Promocion[nroPromocion=" + nroPromocion + "]";
    }

}
